home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / kowin / font / fonted31.lzh / fonted3.c < prev    next >
C/C++ Source or Header  |  1991-01-29  |  7KB  |  297 lines

  1. /*/ ******************************************************************* /*/
  2. /*/                                    /*/
  3. /*/       FONTED3.win  version 1.10   1990 10/24 by 小笠原博之    /*/
  4. /*/                               SPS0783 COR.    /*/
  5. /*/                                    /*/
  6. /*/    v1.10  1991 1/29:  Ko-Window 2.07 対応、高速化、デバッグ    /*/
  7. /*/ ******************************************************************* /*/
  8.  
  9. #include    <stdio.h>
  10. #include    <wlib.h>
  11. #include    <parts.h>    /**/
  12.  
  13. #include    "fed3const.h"
  14. #include    "fonted3.h"
  15.  
  16. #include    "mpat.h"
  17.  
  18. /*/
  19. /*    イベント定義
  20. /*/
  21. #define        EVENT    (EventOpenON        \
  22.             |EventRedrawON        \
  23.             |EventCloseON        \
  24.             |EventUserON        \
  25.             |EventMouseSwitchON)
  26.  
  27. /*//////////////////////////////////////////////////////////////////////*/
  28. /* グローバル宣言                            */
  29. /*//////////////////////////////////////////////////////////////////////*/
  30.  
  31. /*** function ***/
  32. int        EventExec();
  33.  
  34. /*** heap size ***/
  35. int    WindowHeapSize =
  36.     /*### Edit Screen ###*/
  37.         BITSIZEX*BITSIZEY*2/8 +
  38.     /*### TC hankaku Screen ###*/
  39.         4096 /*+*/
  40.     /*### TC zenkaku Screen ###*/
  41. /*        1024*10 +*/
  42.     /*### USKCG Screen ###*/
  43. /*        1024*10 */;
  44.  
  45. Sheet        *EditScreen= 0;
  46.  
  47. ClipClass    EditClip= {
  48.             0, 0, BITSIZEX-1, BITSIZEY-1
  49.         },
  50.         ImgClip= {
  51.             0, 0, EDITSIZEX-1, EDITSIZEY-1
  52.         };
  53.  
  54. unsigned short    ImgBuf[EDITSIZEY],
  55.         ImgBuf2[EDITSIZEY];
  56. Sheet        ImgArea ={
  57.             16,
  58.             16,
  59.             1,
  60.             (short*)ImgBuf,
  61.             (short*)ImgBuf2
  62.         };
  63. EventInfo    *Ainfo;
  64. DrawBuf        dbuf_1[60];
  65. DrawBuf        dbuf_2[2];
  66.  
  67. /*//////////////////////////////////////////////////////////////////////*/
  68. /* メインルーチン                            */
  69. /*//////////////////////////////////////////////////////////////////////*/
  70. void
  71. WindowMain( argc, argv )
  72. char    **argv;
  73. {
  74.     int        x,
  75.             y;
  76.  
  77.     /*/
  78.     /*    オプション解析
  79.     /*/
  80.  
  81.     for( x= y= 2 ; --argc ; ){
  82.         if( **++argv == '-' || **argv == '/' ){
  83.             switch( (*argv)[1] ){
  84.             case 'x':
  85.                 x= atoi( *argv+2 );
  86.                 break;
  87.             case 'y':
  88.                 y= atoi( *argv+2 );
  89.                 break;
  90.             }
  91.         }
  92.     }
  93.  
  94.     /*/
  95.     /*    ウィンドウ設定
  96.     /*/
  97.  
  98.     WindowSetEventAttr( WindowTitleOpen( x, y, BITSIZEX+128+5, BITSIZEY+60, NULL, WINDOWTITLE, Close|Push, EventExec ), EVENT );
  99. }
  100.  
  101. /*//////////////////////////////////////////////////////////////////////*/
  102. /* イベント処理ルーチン                            */
  103. /*//////////////////////////////////////////////////////////////////////*/
  104. EventExec( wp, info )
  105. WindowID    wp;
  106. EventInfo    *info;
  107. {
  108.     switch( info->option ){
  109.         case EventOpen:
  110.             Init_EditScreen();
  111.             Draw_EditScreen_init( wp );
  112.             WindowRedraw( wp );
  113.             return    TRUE;
  114.  
  115.         case EventRedraw:
  116.             WindowDraw( wp, dbuf_1, 5+SWNUMX*SWNUMY*2 );
  117.             return    TRUE;
  118.  
  119.         case EventClose:
  120.             if( EditScreen )
  121.                 SheetClose( EditScreen );
  122.             WindowClose( wp );
  123.             WindowConnectionClose();
  124.             return    TRUE;
  125.  
  126.         case EventUser:    {
  127.             char    **data= info->ComBuffer;
  128.             char    *ptr;
  129.             switch( info->ComData ){
  130.             case UserStrings:
  131.                 (char*)(info->ComBuffer)= *(char**)(info->ComBuffer);
  132.             case UserPaste:
  133.             case UserString:
  134.                 areamsg( wp, "ロード中" );
  135.                 if( loadfont( info->ComBuffer ) ){
  136.                     ImgtoEdit();
  137.                     WindowDraw( wp, dbuf_2, 2 );
  138.                     areamsg( wp, "ロード終了" );
  139.                 }else
  140.                     areamsg( wp, "open error!" );
  141.                 return    TRUE;
  142. /*            default:    */
  143.             case 256:
  144.                 if( data && !*data++ && (ptr= *data++) && *ptr=='\0' && strcmp( ptr+1, "FontData" )== 0 ){
  145.                     unsigned short    *sptr= *((unsigned short**)(++data));
  146.                     int        i;
  147.                     for( i=0 ; i<16 ; i++ )
  148.                         ImgBuf[i]= *sptr++;
  149.                     ImgtoEdit();
  150.                     WindowDraw( wp, dbuf_2, 2 );
  151.                 }
  152.             }
  153.             return    TRUE;
  154.         }
  155.  
  156.         case EventMouseSwitch:
  157.             if( info->LeftStat || info->RightStat ){
  158.                 if( info->x > EDITOFFX && info->x < EDITOFFX+BITSIZEX &&
  159.                     info->y > EDITOFFY && info->y < EDITOFFY+BITSIZEY ){
  160.                     Pset_EditScreen(
  161.                         (info->x-EDITOFFX)/DOTSIZEX,
  162.                         (info->y-EDITOFFY)/DOTSIZEY,
  163.                         info->LeftStat, TRUE, wp );
  164.                 return    TRUE;
  165.                 }
  166.             }
  167.             if( info->LeftON ){
  168.                 Ainfo= info;
  169.                 if( info->x >SWOFFX && info->x <SWOFFX+SWSIZEX*SWNUMX &&
  170.                     info->y >SWOFFY && info->y <SWOFFY+SWSIZEY*SWNUMY ){
  171.                     int    swx= (info->x - SWOFFX)/SWSIZEX,
  172.                         swy= (info->y - SWOFFY)/SWSIZEY;
  173.                     swmode[swx*SWNUMY+swy].exec( wp );
  174.                     return TRUE;
  175.                 }
  176.                 send_font( wp );
  177.             }
  178.             return    TRUE;
  179.     }
  180.     return    FALSE;
  181. }
  182.  
  183.  
  184. /*//////////////////////////////////////////////////////////////////////*/
  185. /* 表示バッファ設定                            */
  186. /*//////////////////////////////////////////////////////////////////////*/
  187. Draw_EditScreen_init( wp )
  188. WindowID    wp;
  189. {
  190.     int    i;
  191.     int    j;
  192.     DrawBuf    *buf;
  193.  
  194.     DrawSetClear( dbuf_1, 1 );
  195.     DrawSetPut( dbuf_1+1, EDITOFFX, EDITOFFY, EditScreen );
  196.     DrawSetPut( dbuf_1+2, IMGOFFX, IMGOFFY, &ImgArea );
  197.     DrawSetLine( dbuf_1+3, EDITOFFX-3, EDITOFFY-2, EDITOFFX+BITSIZEX+1,
  198.                 EDITOFFY+BITSIZEY+1, 3, OptionBox );
  199.     DrawSetLine( dbuf_1+4, MSGOFFX-2, MSGOFFY-1, MSGOFFX+6*14+2, MSGOFFY+14, ShadowDown, OptionShadow );
  200.     buf= dbuf_1+5;
  201.     for( j=0 ; j< SWNUMX ; j++ ){
  202.         for( i=0 ; i< SWNUMY ; i++ ){
  203.             DrawSetSymbol( buf++, SWOFFX+j*(SWSIZEX+4), SWSIZEY*i+SWOFFY, swmode[j*SWNUMY+i].name, AttrDefault, 12 );
  204.             DrawSetLine( buf++, SWOFFX-2+j*(SWSIZEX+4), SWSIZEY*i+SWOFFY, SWOFFX+SWSIZEX+1+j*(SWSIZEX+4), SWSIZEY*i+SWOFFY+SWSIZEY-1, ShadowUp, OptionShadow );
  205.         }
  206.     }
  207.     /* dbuf_1 == (5+SWNUMX*SWNUMY*2) */
  208.  
  209.     DrawSetPut( dbuf_2, EDITOFFX, EDITOFFY, EditScreen );
  210.     DrawSetPut( dbuf_2+1, IMGOFFX, IMGOFFY, &ImgArea );
  211. }
  212.  
  213. /*//////////////////////////////////////////////////////////////////////*/
  214. /* ビットマップバッファの確保                        */
  215. /*//////////////////////////////////////////////////////////////////////*/
  216. Init_EditScreen()
  217. {
  218. int    x,
  219.     y;
  220.  
  221.     int    i;
  222.     if( EditScreen == 0 )
  223.         EditScreen= (Sheet*)SheetOpen( BITSIZEX, BITSIZEY );
  224.     SheetClear( EditScreen, &EditClip, 1 );
  225.     SheetClear( &ImgArea, &ImgClip, 1 );
  226. }
  227.  
  228. /*//////////////////////////////////////////////////////////////////////*/
  229. /* 点の描画                                */
  230. /*//////////////////////////////////////////////////////////////////////*/
  231. Pset_EditScreen( x, y, c, mode, wp )
  232. int    x,
  233.     y,
  234.     c,
  235.     mode;
  236. WindowID    wp;
  237. {
  238.     int    rx1= x*DOTSIZEX,
  239.         ry1= y*DOTSIZEY,
  240.         rx2,
  241.         ry2;
  242.  
  243.     SheetLine( EditScreen, &EditClip, rx1, ry1, rx2=rx1+DOTSIZEX-2, ry2=ry1+DOTSIZEY-2,
  244.                                 !c, OptionFill );
  245.     if( c )
  246.         ImgArea.buf1[y] &=~(32768>>x);
  247.     else
  248.         ImgArea.buf1[y] |= (32768>>x);
  249.     if( mode ){
  250.         DrawBuf    buf[2];
  251.         DrawSetLine( buf, rx1+EDITOFFX, ry1+EDITOFFY, rx2+EDITOFFX, ry2+EDITOFFY,
  252.                                 !c, OptionFill );
  253.         DrawSetPut( buf+1, IMGOFFX, IMGOFFY, &ImgArea );
  254.         WindowDraw( wp, buf, 2 );
  255.     }
  256. }
  257.  
  258. /*//////////////////////////////////////////////////////////////////////*/
  259. /* send font                                */
  260. /*//////////////////////////////////////////////////////////////////////*/
  261. send_font( wp )
  262. WindowID    wp;
  263. {
  264.     WindowID    cwp;
  265.     EventInfo    info2;
  266.  
  267.     mspatset();
  268.     mspat(1);
  269.  
  270.     while( !(WindowGetEventInfo(Ainfo) && Ainfo->LeftOFF) );
  271.     cwp= WindowGetChild( WindowRootID, Ainfo );
  272.     if( cwp && cwp != wp ){
  273.         /*unsigned short    fontbuf[16];*/
  274.         CodePack    pack;
  275.         void        *compack[4]= {
  276.                     (void*)0,
  277.                     (void*)"\0FontData",
  278.                     (void*)&pack,
  279.                     (void*)ImgBuf/*fontbuf*/
  280.                 };
  281. /*        int    i;
  282.         for( i=0 ; i<16 ; i++ )
  283.             fontbuf[i]= ImgBuf[i];
  284. */
  285.         pack.xsize= 16;
  286.         pack.ysize= 16;
  287.         pack.code = 1;
  288.         pack.sendx= Ainfo->x;
  289.         pack.sendy= Ainfo->y;
  290.         info2.option= EventUser;
  291.         info2.ComBuffer= compack;
  292.         info2.ComData= 256;
  293.         WindowSendEvent( cwp, &info2 );
  294.     }
  295.     mspat(0);
  296. }
  297.